package org.zecontech.extraplus.datagen;

import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Items;
import net.neoforged.neoforge.common.Tags;
import net.neoforged.neoforge.common.data.ItemTagsProvider;
import org.zecontech.extraplus.ExtraPlus;
import org.zecontech.extraplus.init.ModItems;
import org.zecontech.extraplus.init.ModItemTagKeys;
import org.zecontech.extraplus.util.ItemUtils;

import java.util.concurrent.CompletableFuture;

/**
 * 模组物品标签数据提供者
 */
public class ModItemTagsProvider extends ItemTagsProvider {

    public ModItemTagsProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider) {
        super(output, lookupProvider, ExtraPlus.MOD_ID);
    }

    /**
     * 添加物品标签
     * @param provider 提供者
     */
    @Override
    protected void addTags(HolderLookup.Provider provider) {
        tag(ModItemTagKeys.RUBY_GEM_TAG).add(ModItems.RUBY.get());
        tag(ModItemTagKeys.AMBER_GEM_TAG).add(ModItems.AMBER.get());
        tag(ModItemTagKeys.EMERALD_GEM_TAG).add(Items.EMERALD);
        tag(ModItemTagKeys.SILVER_INGOT_TAG).add(ModItems.SILVER_INGOT.get());
        tag(ItemTags.MEAT).add(ModItems.KELONG_MEAT.get());
        ModItems.ITEMS.getEntries().forEach(item -> {
            if (ItemUtils.isTools(item.get())) {
                tag(Tags.Items.TOOLS).add(item.get());
            } else if (ItemUtils.isArmor(item.get())) {
                tag(Tags.Items.ARMORS).add(item.get());
            } else if (ItemUtils.isMushroom(item.get())) {
                tag(Tags.Items.MUSHROOMS).add(item.get());
            } else if (ItemUtils.isLog(item.get())) {
                tag(ItemTags.LOGS).add(item.get());
            } else if (ItemUtils.isLeaves(item.get())) {
                tag(ItemTags.LEAVES).add(item.get());
            } else if (ItemUtils.isPlanks(item.get())) {
                tag(ItemTags.PLANKS).add(item.get());
            }
            if (ItemUtils.isAxe(item.get())) {
                tag(ItemTags.AXES).add(item.get());
            } else if (ItemUtils.isPickaxe(item.get())) {
                tag(ItemTags.PICKAXES).add(item.get());
            } else if (ItemUtils.isHoe(item.get())) {
                tag(ItemTags.HOES).add(item.get());
            } else if (ItemUtils.isShovel(item.get())) {
                tag(ItemTags.SHOVELS).add(item.get());
            } else if (ItemUtils.isSword(item.get())) {
                tag(ItemTags.SWORDS).add(item.get());
            } else if (ItemUtils.isShears(item.get())) {
                tag(Tags.Items.TOOLS_SHEAR).add(item.get());
            } else if (ItemUtils.isHelmet(item.get())) {
                tag(ItemTags.HEAD_ARMOR).add(item.get());
            } else if (ItemUtils.isChestplate(item.get())) {
                tag(ItemTags.CHEST_ARMOR).add(item.get());
            } else if (ItemUtils.isLeggings(item.get())) {
                tag(ItemTags.LEG_ARMOR).add(item.get());
            } else if (ItemUtils.isBoots(item.get())) {
                tag(ItemTags.FOOT_ARMOR).add(item.get());
            } else if (ItemUtils.isEdible(item.get())) {
                tag(Tags.Items.FOODS).add(item.get());
            }
        });
    }
}
